package com.yuchen.utils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * 1.domain表示的是cookie所在的域，默认为请求的地址，
 * 如网址为www.test.com/test/test.aspx，那么domain默认为www.test.com。而跨域访问，如域A为t1.test.com，域B为t2.test.com，
 * 那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.test.com；
 * 如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。
 *
 *2.path表示cookie所在的目录，asp.net默认为/，就是根目录。
 *在同一个服务器上有目录如下：/test/,/test/cd/,/test/dd/，
 *现设一个cookie1的path为/test/，cookie2的path为/test/cd/，
 *那么test下的所有页面都可以访问到cookie1，
 *而/test/和/test/dd/的子页面不能访问cookie2。
 *这是因为cookie能让其path路径下的页面访问。
 */
public class CookieUtils {

    private static String default_path = "/";
    private static int default_age = 60 * 60 * 24 ;//默认保存1day时间
    public static int one_day = 60 * 60 * 24;

    // 设置age
    public static void addCookie(String name, String value, int age,HttpServletResponse response) throws UnsupportedEncodingException {
        Cookie cookie = new Cookie(name, URLEncoder.encode(value, "utf-8"));
        cookie.setMaxAge(age);
        cookie.setPath(default_path);
        //绑定域名设置
        //cookie.setDomain("");
        response.addCookie(cookie);

    }

    public static void addCookie(String name, String value, HttpServletResponse
            response) throws UnsupportedEncodingException {
        addCookie(name, value,default_age, response);
    }

    public static String findCookie(String name, HttpServletRequest request)
            throws UnsupportedEncodingException {
        String value = null;
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals(name)) {
                    value = URLDecoder.decode(cookie.getValue(), "utf-8");
                }
            }
        }
        return value;
    }

    public static void deleteCookie(String name, HttpServletResponse response) {
        Cookie cookie = new Cookie(name, "");
        cookie.setMaxAge(0);
        cookie.setPath(default_path);
        response.addCookie(cookie);
    }
}